블로그 릴레이 - 불완전한 멀티파트 업로드 파일의 비용 확인하기

블로그 릴레이 - 불완전한 멀티파트 업로드 파일의 비용 확인하기

한국어 블로그 릴레이의 열다섯 번째 블로그입니다. 불완전한 멀티파트 업로드에 대하여 알아보고 불필요한 비용을 줄이는 방법에 대하여 알아봅니다.
Clock Icon2024.10.07

안녕하세요.
AWS 사업 본부의 이수재입니다.

본 블로그는 당사의 한국어 블로그 릴레이의 열다섯 번째 블로그입니다.

이번 블로그의 주제는「불완전한 멀티파트 업로드 파일을 삭제해서 비용 줄이기」입니다.

불완전한 멀티파트 업로드 파일이 무엇인지, 비용을 절약하기 위해서 어떻게 확인하고 설정할지에 대하여 알아봅니다.

멀티파트 업로드란

멀티파트 업로드를 사용하면 단일 객체를 여러 부분의 집합으로 업로드할 수 있습니다. 각 부분은 객체 데이터의 연속적인 부분입니다. 이러한 객체 부분은 독립적으로 그리고 임의의 순서로 업로드할 수 있습니다. - 공식 문서

멀티파트 업로드(이하 MPU)는 하나의 파일을 여러 파트로 나누어 전송하는 파일을 업로드 하는 방법 중 하나입니다.

MPU의 메리트에 대해 공식 문서에서는 다음과 같이 설명하고 있습니다.

  • 개선된 처리량 개선 : 부분을 병렬적으로 업로드하여 처리량을 개선할 수 있습니다.
  • 네트워크 문제로부터 빠른 복구 : 더 작아진 부분 크기는 네트워크 오류로 인해 실패한 업로드 재시작의 영향을 최소화합니다.
  • 객체 업로드 일시 중지 및 재개 : 객체 부분을 장시간에 걸쳐 업로드할 수 있습니다. 일단 멀티파트 업로드가 시작되면 제한 시간이 없습니다. 멀티파트 업로드를 명시적으로 완료하거나 중단해야 합니다.
  • 최종 객체 크기를 알기 전에 업로드를 시작 : 객체를 생성하는 동안 업로드할 수 있습니다.

즉, 크기가 큰 파일일수록 MPU를 이용하는 것이 좋으며 100 MB에 가까운 파일이라면 단일 업로드대신 MPU를 고려하는 것을 추천하고 있습니다.

업로드 후에 체크섬을 통하여 오브젝트의 무결성을 확보[1]하고 있습니다.

필요에 따라 사용 환경의 네트워크 등을 고려하여 적절한 값으로 최적화 하면 더욱 쾌적한 업로드가 가능해집니다.
최적화에 관해서는 다음 내용을 참고해주세요.

https://repost.aws/ko/knowledge-center/s3-upload-large-files

https://stackoverflow.com/questions/46556972/what-is-the-optimal-setting-for-multipart-threshold-and-multipart-chunksize-whil

MPU는 AWS CLI나 API 뿐만 아니라 콘솔에서 업로드 할 때 등 여러 방면에서 사용할 수 있습니다.

https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/mpu-upload-object.html

불완전한 멀티파트 업로드란?

위에서 설명한 MPU가 간혹 실패하는 경우가 있습니다.
AWS 지식 센터에서는 다음과 같이 설명하고 있습니다.

멀티파트 업로드 실패는 시간 초과 또는 수동 취소로 인해 발생합니다. 대부분의 경우 AWS CLI는 자동으로 멀티파트 업로드를 취소한 다음 사용자가 생성한 모든 멀티파트 파일을 제거합니다. 이 프로세스는 몇 분 정도 걸릴 수 있습니다. aws s3api 명령을 사용하고 프로세스가 중단된 경우 업로드의 불완전한 부분을 제거한 다음 부분을 다시 업로드합니다. - 출처

이러한 불완전한 멀티파트 업로드(Incomplete Multipart Uploads, IMPU)된 파트가 있다면 S3는 파일을 조립하여 완전한 객체를 생성하지 않습니다.
이렇게 남은 파일에 대해 별도의 조치를 취하지 않는다면 계속 버킷에 남아 불필요한 비용을 발생시키는 원인이 되기도 합니다.

특히 s3 의 상위 수준 명령어에서는 기본적으로 일정 크기 이상의 업로드[2]는 MPU가 적용되도록 설정되어 있습니다.

Amazon S3에 대용량 파일을 업로드할 경우에는 멀티파트 업로드를 활용하는 것이 가장 좋습니다. AWS 명령줄 인터페이스(AWS CLI)를 사용하는 경우에는 객체가 크다면 상위 수준 aws s3 명령이 모두 자동으로 멀티파트 업로드를 수행합니다. 이러한 상위 수준 명령에는 aws s3 cp 및 aws s3 sync가 포함됩니다. - 출처

따라서 본인이 의식하지 않더라도 IMPU 파일은 남아있을 가능성이 있습니다.

불필요한 비용 확인하기

불필요하게 발생하고 있는 비용을 확인하기 위해서는 AWS CLI 명령어를 이용하여 업로드가 실패한 파일을 확인하거나 S3 스토리지 렌즈에서 대시보드를 생성하여 파일의 사이즈를 확인하여 계산할 수 있습니다.
S3 스토리지 렌즈가 더 간단하기도 하고 조직 단위로 확인하는 것도 가능하기 때문에 이쪽을 추천합니다.

S3 스토리지 렌즈란 S3 활용 상황에 대한 대시보드를 제공 및 분석할 수 있는 기능입니다.

Amazon S3 스토리지 렌즈는 객체 스토리지 및 활동에 대한 조직 전반의 가시성을 확보하는 데 사용할 수 있는 클라우드 스토리지 분석 기능입니다. S3 스토리지 렌즈는 또한 지표를 분석해 스토리지 비용을 최적화하고 데이터 보호에 대한 모범 사례를 적용하는 데 사용할 수 있는 상황별 권장 사항을 제공합니다. - 공식 문서

S3 스토리지 렌즈는 무료로 이용할 수 있는 지표가 있으며 유료로 고급 지표 및 권장 사항을 옵션도 이용할 수 있습니다.
최근 14일 간의 IMPU 파일의 확인은 무료 지표에서도 확인 가능합니다.

S3 스토리지 렌즈 대시보드 생성하기

대시보드 생성은 S3 콘솔에서 생성 및 설정할 수 있으며 구성 파일은 CLI 등으로도 업데이트 할 수 있습니다.

이 글에서는 S3 콘솔을 이용하여 대시보드를 생성하고 IMPU 파일 사이즈를 확인하는 방법에 대하여 알아봅니다.

  1. S3 콘솔에 접속하여 좌측의 Storage Lens에서 대시보드에 액세스합니다. 이후 대시보드 생성을 클릭합니다.
  2. 대시보드 이름, 태그, 대상으로 할 리전 및 버킷 등 필요 사항을 선택합니다. 입력 후 대시보드를 생성합니다.
  • 필요에 따라 무료 지표 혹은 고급 지표 및 권장 사항을 선택합니다.
    33
  1. 데이터 수집까지 2일이 소요됩니다. 데이터 수집이 완료되면 다음과 같이 대시보드를 확인할 수 있습니다.
    11

  2. 지표 범주비용 최적화로 선택하면 7일을 초과한 미완료 멀티파트 업로드 바이트 항목을 확인할 수 있습니다.
    22

불필요한 파일의 삭제

그래서 기본적으로 모든 버킷에 일정 날짜 이상의 IMPU 파일은 지우도록 라이프 사이클을 설정하는 것을 추천하고 있습니다.
설정 방법은 아래 문서를 참고해주세요.

https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/mpu-abort-incomplete-mpu-lifecycle-config.html

마무리

멀티파트 업로드와 실패한 업로드로 인한 불필요한 비용 발생에 대하여 알아보았습니다.
IMPU에 관한 라이프 사이클 설정은 Trusted Advisor에서도 설정하도록 권장하고 있는 사항이니 버킷을 생성할 때 염두해두는 것이 좋습니다.

또한 Organization을 대상으로 대시보드 생성이 필요하다면 관리자 계정에서 S3 스토리지 렌즈 메뉴의 AWS Organization 설정에 액세스 한 후 활성화를 하면 됩니다.
이후 대시보드를 생성할 때 대시보드가 대상으로 하는 범위가 계정인지 혹은 조직인지 선택할 수 있습니다.
조직을 대상으로 대시보드를 생성할 때도 무료 지표를 이용할 수 있습니다.

이상으로 한국어 블로그 릴레이의 열다섯 번째 블로그「불완전한 멀티파트 업로드 파일의 비용 확인하기」편이었습니다.

끝까지 읽어주셔서 감사합니다! AWS 사업 본부 이수재였습니다.

그 외 참고 문서

脚注
  1. 정확히는 MPU 만 체크섬을 실행하는 것이 아니라 S3에 객체를 업로드할 때 기본적으로 MD5를 사용하여 데이터 무결성을 확인하고 있습니다. 추가적인 체크섬을 진행하도록 설정하는 것도 가능합니다. ↩︎

  2. 정확히는 multipart_threshold 설정 값 이상인 크기의 객체 업로드에 대해서 MPU로 업로드됩니다. 기본 값이 8MB 이기 때문에 MPU가 활성화 된 경우가 많습니다. ↩︎

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.